/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestorSimilar;

import util.exceptions.TemaNoExistenteException;
import util.exceptions.TemaExistenteException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.exceptions.PaginaExistenteException;

/**
 *
 * @author Nacho
 */
public class Tema {

    private String nombre;
    private int id;

    static Tema creaTema(String nombre) throws TemaExistenteException {
        int id;
        Conexion cn = Conexion.getConexion();
        ResultSet rs;
        try {
            rs = cn.ejecutaSP("creaTema('" + nombre + "');");
            rs.next();
            id = rs.getInt(1);
            Tema t = new Tema(nombre, id);
            throw new UnsupportedOperationException();
            //return t;
        } catch (com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException exx) {
            throw new TemaExistenteException();
        } catch (SQLException ex) {
            ex.printStackTrace();
            System.exit(-1);
            throw new UnsupportedOperationException();
            //return null;
        }
    }
    static void borraTemasDePagina(Pagina p){
        Conexion cn = Conexion.getConexion();
        try {
            cn.ejecutaSP("borraTemas('"+p.getId()+"')");
            p.setTemas(null);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
    }
    static Tema obtenTema(String tema){
        Conexion cn = Conexion.getConexion();
        Tema t = null;
        try {
            ResultSet rs = cn.ejecutaSP("obtenTema('"+tema+"')");
            if(rs.next()){
                 t = new Tema(rs.getString(2),rs.getInt(1));
            }else{
                throw new TemaNoExistenteException();
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return t;
        
        
    }
    
    static LinkedList<Tema> getTemasDePagina(Pagina pag) {

        Conexion cn = Conexion.getConexion();
        ResultSet rs = null;
        try {
            rs = cn.ejecutaSP("getTemasDePagina('" + pag.getId() + "');");
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
        return fromRStoList(rs);
    }
    static LinkedList<Tema> getTodosTemas() {

        Conexion cn = Conexion.getConexion();
        ResultSet rs = null;
        try {
            rs = cn.ejecutaSP("getTodosTemas();");
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
        return fromRStoList(rs);
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 67 * hash + this.id;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Tema other = (Tema) obj;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }


    static LinkedList<Tema> fromRStoList(ResultSet rs) {
        LinkedList<Tema> lista = new LinkedList<Tema>();
        Tema t;
        try {
            while (rs.next()) {
                t = new Tema(rs.getString(2), rs.getInt(1));
                lista.add(t);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return lista;
    }

    private Tema(String nombre, int id) {
        this.nombre = nombre;
        this.id = id;
    }

    private Tema() {
    }

    public String getNombre() {
        return nombre;
    }

    public int getId() {
        return id;
    }

    @Override
    public String toString() {
        return "Tema{" + "nombre=" + nombre + ", id=" + id + '}';
    }
    public static void main(String[] args) {
        Pagina p = Pagina.obtenPagina("http://www.itam.mx");
        LinkedList<Tema> temas = Tema.getTemasDePagina(p);
        Tema t = Tema.obtenTema("Busqueda");
        System.out.println(t.toString());
    }
}
